// 路由中间件的固定写法
const express = require('express');

// 定义路由中间件
let Router = express.Router();

// 这里定义api接口和编写逻辑
// 1. 获取英雄数据接口
Router.get('/getHeroList', (req, res) => {
    // execSql
    // 1.0 处理请求参数
    let { heroName } = req.query;

    // 1.1 拼接SQL语句，如果heroName 参数有值则带条件，否则查询所有英雄数据
    let sql = ' select * from heros where isdelete = 0 ';  // 表示查询出正常的数据，排除了isdelete=1的数据（软删除）
    if (heroName) {
        sql += ` and  name = '${heroName}'`;
    }

    // 2.0 响应
    res.execSql(sql, (err, result) => {
        if (err) {
            res.send({ msg: err.message });
            return;
        }
        res.send(result);
    })
})

// 2. 新增英雄
Router.post('/addHero', (req, res) => {
    // 1.处理请求参数
    // 1.1 结构参数
    let { name, gender, img } = req.body;
    // 1.2 参数合法性检查(由于数据表中的name字段是非空的，其他字段可以为null，所以只需要验证它接口)
    if (!name) {
        res.send({ "code": 201, "msg": "参数name不能为空" });
        return;
    }

    // 2. 处理响应数据
    let sql = ` insert into heros(name,gender,img,isdelete) values('${name}','${gender}','${img}',0)`;
    res.execSql(sql, (err, result) => {
        if (err) {
            res.send({ code: 500, msg: err.message });
            return;
        }

        res.send({ code: 200, msg: '英雄新增成功' });
    })
})

// 3. 删除英雄（软删除）
// 新点：/hero/delHeroById/:id  /:id表示一个路由参数，这种类型的参数要使用req.params来获取
// ddsfd/?id=1  -> req.query
Router.get('/delHeroById/:id', (req, res) => {
    let { id } = req.params;
    // 1.0 id参数合法性检查
    if (!id || isNaN(id)) {
        res.send({ code: 201, msg: 'id参数不合法，请传入一个数字' });
        return;
    }

    // 2.0 处理响应数据
    let sql = ` update heros set isdelete = 1 where id = ${id}`;

    res.execSql(sql, (err, result) => {
        if (err) {
            res.send({ code: 500, msg: err.message });
            return;
        }

        res.send({ code: 200, msg: '删除成功' });
    })

})

// 4. 根据id获取英雄数据
Router.get('/getHeroById', (req, res) => {
    let { id } = req.query;
    // 1.0 id参数合法性检查
    if (!id || isNaN(id)) {
        res.send({ code: 201, msg: 'id参数不合法，请传入一个数字' });
        return;
    }

    // 2.0 处理响应数据
    let sql = ` select * from heros where isdelete = 0 and id = ${id} `;

    res.execSql(sql, (err, result) => {
        if (err) {
            res.send({ code: 500, msg: err.message });
            return;
        }

        // 判断根据id获取到了一条有效的数据
        if (result.length > 0) {
            res.send({ code: 200, msg: "请求成功", data: result[0] });
        } else {
            res.send({ code: 200, msg: "请求成功", data: {} });
        }
    })
})


// 5. 更新英雄数据
Router.post('/updateHero', (req, res) => {
    // 1 参数处理，合法性检查
    let { id, name, gender, img } = req.body;
    // 1.0 id参数合法性检查
    if (!id || isNaN(id)) {
        res.send({ code: 201, msg: 'id参数不合法，请传入一个数字' });
        return;
    }

    // 1.1 name合法性检查
    if (!name) {
        res.send({ code: 201, msg: 'name参数不合法，name非空' });
        return;
    }

    // 2.0 响应处理
    let sql = `UPDATE heros set name='${name}',gender='${gender}',img='${img}' WHERE id= ${id}`;
    res.execSql(sql, (err, result) => {
        if (err) {
            res.send({ code: 500, msg: err.message });
            return;
        }
        res.send({ code: 200, msg: '更新成功' });
    })

})


const multer = require('multer');
const path = require('path');
let storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'uploads');  // 将上传的头像保存到上一级的uploads文件夹中
    },
    filename: function (req, file, cb) {
        // file：格式
        /*
         file参数格式：{
                    fieldname: 'avator',
                    originalname: '中文.png',
                    encoding: '7bit',
                    mimetype: 'image/png'
                    }
        */
        let extname = path.extname(file.originalname);
        // 将上传过来的头像重命名成时间戳+扩展名的文件名
        cb(null, Date.now() + extname);
    }
})
let upload = multer({ storage: storage })

// 6.上传头像
Router.post('/uploadFile', upload.single('file_data'), (req, res) => {

    console.log(req.file);

    res.send({ "code": 200, "msg": "上传成功", "src": req.file.path });
})



// 导出路由中间件
module.exports = Router;